$(function () {
    initTable();
    initPerTable();
    validateForm();
});

/**
 * 初始化表格
 */
function initTable() {

    //先销毁表格
    $('#table').bootstrapTable('destroy');

    $('#table').bootstrapTable({
        showRefresh: false,
        pagination: true,
        clickToSelect: true,  //启用点击选中行
        sortable:false,
        sidePagination: "server",
        pageSize: "30",
        pageList: "[30, 60, 120, ALL]",
        showColumns: false,
        url: baseUrl + '/role/queryByPage',
        columns: [
            {
                checkbox: true,
                align: 'center'
            },
            {
                title: '名称',
                field: 'name',
                align: 'center',
                width: '10%'
            },
            {
                title: '描述',
                field: 'description',
                align: 'center',
                width: '17%'
            },
            {
                title: '权限',
                field: 'perNames',
                align: 'center',
                width: '70%'
            }
        ],
        striped: true, //表格显示条纹
        search: false, //是否启用查询
        queryParamsType: "undefined",
        onLoadError: function () {
            $.confirm({
                title: '提示!',
                content: '服务器异常！',
                type: 'red',
                typeAnimated: true,
                buttons: {
                    close: {
                        text: '关闭',
                        btnClass: 'btn-red'
                    }
                }
            });
        },
        onLoadSuccess: function (data) {
            // 错误提示
            errorAlert(data);
        }
    });
}

/**
 * 表单验证
 */
function validateForm() {

    $('#editForm').bootstrapValidator({
        excluded: [':disabled'],
        feedbackIcons: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        },
        submitButtons: 'button[type="submit"]',
        resetFormData: true,
        fields: {
            name: {
                validators: {
                    /*非空提示*/
                    notEmpty: {
                        message: '名称不能为空'
                    },
                    /*长度提示*/
                    stringLength: {
                        min: 2,
                        max: 20,
                        message: '名称不正确'
                    },
                    //有2字符以上才发送ajax请求，（input中输入一个字符，插件会向服务器发送一次，设置限制，2字符以上才开始）
                    threshold: 4,
                    //ajax验证。server result:{"valid",true or false} 向服务发送当前input name值，获得一个json数据。例表示正确：{"valid",true}
                    remote: {
                        url: baseUrl + '/role/find',
                        // 自定义提交数据，默认值提交当前input value
                        data: function (validator) {
                            return {
                                name: $('#name').val()
                            };
                        },
                        message: '名称已存在',//提示消息
                        delay: 2000,//每输入一个字符，就发ajax请求，服务器压力还是太大，设置2秒发送一次ajax（默认输入一个字符，提交一次，服务器压力太大）
                        type: 'POST'//请求方式
                    }
                }
            },
            description: {
                validators: {
                    /*非空提示*/
                    notEmpty: {
                        message: '描述不能为空'
                    },
                    /*长度提示*/
                    stringLength: {
                        min: 1,
                        max: 500,
                        message: '描述不正确'
                    }
                }
            }
        }
    }).on('success.form.bv', function (e, data) {
        e.preventDefault();//阻止form默认事件
        var id = $('#id').val();
        var url;
        if (id == '') {
            url = baseUrl + '/role/add';
        } else {
            url = baseUrl + '/role/update';
        }
        $.post(
            url, {
                id: id,
                name: $('#name').val(),
                description: $('#description').val()
            },
            function (data) {
                if (data.success) {
                    $('#modal-role').modal('toggle');
                    $.confirm({
                        title: '成功',
                        content: '操作完成!',
                        autoClose: 'okAction|2000',
                        escapeKey: 'okAction',
                        type: 'blue',
                        buttons: {
                            okAction: {
                                text: '关闭',
                                btnClass: 'btn-blue'
                            }
                        }
                    });
                    $('#table').bootstrapTable('refresh', {silent: true});
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    });
}

/**
 * 获取选择行id
 * @returns {Array|*}
 */
function getIdSelections() {
    return $.map($('#table').bootstrapTable('getSelections'), function (row) {
        return row.id;
    });
}

/**
 * 表格项选择事件触发
 */
$('#table').on('check.bs.table uncheck.bs.table ' +
    'check-all.bs.table uncheck-all.bs.table', function () {
    $('#btnUpdate').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
    $('#btnDel').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
    $('#btnPer').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
});

/**
 * 禁用按钮
 */
function disAbleButton() {
    $('#btnUpdate').prop('disabled', true);
    $('#btnDel').prop('disabled', true);
    $('#btnPer').prop('disabled', true);
}

/**
 * 删除操作
 */
function del() {
    var ids = getIdSelections();
    $.confirm({
        title: '确认',
        content: '确认删除？',
        buttons: {
            ok: {
                text: '确认',
                btnClass: 'btn-green',
                keys: ['enter'],
                action: function () {
                    $.post(
                        baseUrl + '/role/del', {ids: ids.toString()},
                        function (data) {
                            if (data.success) {
                                $('#table').bootstrapTable('refresh', {silent: true});
                                // 灰按钮
                                disAbleButton();
                            } else {
                                // 错误提示
                                errorAlert(data);
                            }
                        }, 'json');
                }
            },
            close: {
                text: '取消',
                btnClass: 'btn-default',
                keys: ['esc'],
                action: function () {

                }
            }
        }
    });
}

/**
 * 新增窗口
 */
function add() {
    $('#id').val('');
    $('#name').val('');
    $('#description').val('');
    $("#name").attr("readonly", false);// 名称能修改
    $('#editForm').data('bootstrapValidator').enableFieldValidators("name", true);// 名称验证
    $('#modal-role').modal('show');
    $('#editForm').data('bootstrapValidator').resetForm();
}

/**
 * 更新窗口
 */
function update() {
    var data = $('#table').bootstrapTable('getSelections');
    if (data.length > 1) {
        $.confirm({
            title: '提示',
            content: '只能修改一条记录！',
            autoClose: 'okAction|2000',
            escapeKey: 'okAction',
            type: 'orange',
            buttons: {
                close: {
                    text: '关闭',
                    btnClass: 'btn-orange'
                }
            }
        });
    } else {
        $('#id').val(data[0].id);
        $('#name').val(data[0].name);
        $('#description').val(data[0].description);
        $("#name").attr("readonly", true);// 名称不能修改
        $('#editForm').data('bootstrapValidator').enableFieldValidators("name", false);// 取消名称验证
        $('#modal-role').modal('show');
        $('#editForm').data('bootstrapValidator').resetForm();
    }
}

/**
 * 搜索
 */
function search() {
    var role_name = $('#search_role_name').val();
    if (role_name != '') {
        var opt = {
            url: baseUrl + "/role/queryByPage",
            silent: true,
            query: {
                role_name: role_name
            }
        };
        $("#table").bootstrapTable('refresh', opt);
    }
}

/**
 * 初始化权限表格
 */
function initPerTable() {

    //先销毁表格
    $('#table_per').bootstrapTable('destroy');

    $('#table_per').bootstrapTable({
        showRefresh: false,
        pagination: false,
        showColumns: false,
        clickToSelect: true,  //启用点击选中行
        url: baseUrl + '/per/query',
        columns: [
            {
                checkbox: true,
                align: 'center'
            },
            {
                title: '名称',
                field: 'name',
                align: 'center'
            },
            {
                title: '描述',
                field: 'description',
                align: 'center'
            }
        ],
        striped: false, //表格显示条纹
        search: true, //是否启用查询
        searchOnEnterKey: false,//设置为 true时，按回车触发搜索方法，否则自动触发搜索方法
        queryParamsType: "undefined",
        queryParams: function queryParams(params) {   //设置查询参数
            var param = {
                name: params.search
            };
            return param;
        },
        onLoadError: function () {
            $.confirm({
                title: '提示!',
                content: '服务器异常！',
                type: 'red',
                typeAnimated: true,
                buttons: {
                    close: {
                        text: '关闭',
                        btnClass: 'btn-red'
                    }
                }
            });
        },
        onLoadSuccess: function (data) {
            // 错误提示
            errorAlert(data);
        }
    });
}

/**
 * 授权权限
 */
function grantPer() {
    $("#table_per").bootstrapTable("uncheckAll");
    // 如果选择的角色只是一个，则复选已经拥有的权限
    var roleInfos = $('#table').bootstrapTable('getSelections');
    var hasPerIds = [];
    if (roleInfos.length == 1) {
        var pers = roleInfos[0].permissions;
        if (pers != null && pers.length > 0) {
            for (var i in pers) {
                hasPerIds.push(parseInt(pers[i].id));
            }
        }
    }
    // 查询显示所有可用权限
    var pers = $('#table_per').bootstrapTable('getData');
    if (pers != null && hasPerIds.length > 0) {
        $("#table_per").bootstrapTable("checkBy", {field:"id", values:hasPerIds});
    }
    $('#modal-per').modal('show');
}

/**
 * 保存授权
 */
function rolePerSave() {
    var role_ids = getIdSelections();
    var per_ids = $.map($('#table_per').bootstrapTable('getSelections'), function (row) {
        return row.id;
    });
    // 删除角色授权
    if (per_ids.length == 0) {
        $.post(
            baseUrl + '/rolePer/del', {roleIds: role_ids.toString()},
            function (data) {
                if (data.success) {
                    $('#table').bootstrapTable('refresh', {silent: true});
                    $('#modal-per').modal('toggle');
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    } else { // 修改角色授权
        var rolePer;
        var rolePers = [];
        for (var i in role_ids) {
            for (var j in per_ids) {
                rolePer = {roleId: role_ids[i], permissionId: parseInt(per_ids[j])};
                rolePers.push(rolePer);
            }
        }
        $.post(
            baseUrl + '/rolePer/edit', {rolePers: JSON.stringify(rolePers)},
            function (data) {
                if (data.success) {
                    $('#table').bootstrapTable('refresh', {silent: true});
                    $('#modal-per').modal('toggle');
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    }
}